﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class ПроцедурыУправленияПерсоналомДополнительный
	{
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ ОБЕСПЕЧЕНИЯ РАБОТЫ ФОРМ ДОКУМЕНТОВ
		// Открывает для выбора список доков ЗарплатаКВыплатеОрганизаций конкретной организации
		//
		// Параметры
		//  Элемент - поле ввода, в котором выбирается платежная ведомость
		//  СтандартнаяОбработка - булево, признак стандартной обработки события
		//  Организация - СправочникСсылка.Организации, организация ведости которой надо выбрать
		//  СпособыВыплатыЗарплаты - ПеречислениеСсылка.СпособыВыплатыЗарплаты - дополнительное ограничение на список ведомостей
		//  Банк - СправочникСсылка.Контрагенты, отбор по банку указанный в ведомости, если предусмотрен
		//

		public void ОткрытьФормуВыбораПлатежныхВедомостейОрганизации(/*Элемент, СтандартнаяОбработка, Организация, СпособыВыплатыЗарплаты, Банк = Неопределено*/)
		{
			//СтандартнаяОбработка  = Ложь;
			//ФормаВыбора = Документы.ЗарплатаКВыплатеОрганизаций.ПолучитьФормуВыбора(, Элемент);
			//ФормаВыбора.НачальноеЗначениеВыбора = Элемент.Значение;
			//ФормаВыбора.Отбор.Организация.ВидСравнения	= ВидСравнения.Равно;
			//ФормаВыбора.Отбор.Организация.Значение		= Организация;
			//ФормаВыбора.Отбор.Организация.Использование	= Истина;
			//ФормаВыбора.Отбор.СпособВыплаты.ВидСравнения	= ВидСравнения.Равно;
			//ФормаВыбора.Отбор.СпособВыплаты.Значение		= СпособыВыплатыЗарплаты;
			//ФормаВыбора.Отбор.СпособВыплаты.Использование	= Истина;
			if(true/*Банк <> Неопределено*/)
			{
				//ФормаВыбора.Отбор.Банк.ВидСравнения		= ВидСравнения.Равно;
				//ФормаВыбора.Отбор.Банк.Значение			= Банк;
				//ФормаВыбора.Отбор.Банк.Использование	= Истина;
			}
			//ФормаВыбора.Открыть();
		}
		// ОткрытьФормуВыбораКассовыхПлатежныхВедомостейОрганизации()
		////////////////////////////////////////////////////////////////////////////////
		// Вспомогательные процедуры, функции

		public object ПолучитьРежимНабораПерсонала(/**/)
		{
			//ИспользоватьУправленческийУчетЗарплаты = глЗначениеПеременной("глИспользоватьУправленческийУчетЗарплаты");
			if(true/*НЕ ИспользоватьУправленческийУчетЗарплаты*/)
			{
				//РежимНабораПерсонала = Перечисления.ВидыОрганизационнойСтруктурыПредприятия.ПоСтруктуреЮридическихЛиц;
			}
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ формирования движений кадровых документов по плановым начислениям работников организации
		// Процедура строит список должностей (или подразделений), по кадровому плану предприятия.
		//
		// Параметры:
		//  Режим - строка, может принимать значения: "Должность" или "Подразделение" определяет, что именно
		//			будет выбирать пользователь
		//  ДолжностьИлиПодразделение - СправочникСсылка.Подразделения или СправочникСсылка.Должности,
		//			второе значение в текущей строке т.п.
		//
		// Возвращаемое значение
		//  нет
		//

		public object ВыбратьИзКадровогоПланаПредприятия(/*Режим, ДолжностьИлиПодразделение*/)
		{
			//Запрос = Новый Запрос;
			if(true/*НЕ ЗначениеЗаполнено(ДолжностьИлиПодразделение)*/)
			{
			}
			//Запрос.УстановитьПараметр("ДолжностьИлиПодразделение",ДолжностьИлиПодразделение);
			if(true/*Режим = "Подразделение"*/)
			{
				/*ТекстЗапроса = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	КадровыйПланСрезПоследних.Подразделение КАК Элемент,
		|	КадровыйПланСрезПоследних.Подразделение.Наименование КАК ЭлементНаименование
		|ИЗ
		|	РегистрСведений.КадровыйПлан.СрезПоследних(
		|		,
		|		Должность В
		|			(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|				ДолжностиОрганизаций.Ссылка
		|			ИЗ
		|				Справочник.ДолжностиОрганизаций КАК ДолжностиОрганизаций
		|			ГДЕ
		|				ДолжностиОрганизаций.Должность = &ДолжностьИлиПодразделение)) КАК КадровыйПланСрезПоследних
		|ГДЕ
		|	КадровыйПланСрезПоследних.Количество > 0";*/
			}
			//Запрос.Текст = ТекстЗапроса;
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*РезультатЗапроса.Пустой()*/)
			{
			}
			//Выборка = РезультатЗапроса.Выбрать();
			//СписокВыбора = Новый СписокЗначений();
			while(true/*Выборка.Следующий()*/)
			{
				//СписокВыбора.Добавить(Выборка.Элемент, Выборка.ЭлементНаименование);
			}
			return null;
		}
		// ВыбратьИзКадровогоПланаПредприятия
		// Возвращает структуру с данными по выбранному работнику
		// Парамтеры:
		//	Сотрудник - ссылка на справочник Сотрудники
		//	ВыбираемыеДанные - строка, признак того, что нужно выбирать данные из регистров Работники и/или УчетЗаработкаРаботников
		//
		// Возвращаемое значение:
		//  Структура с элементами
		//		всегда присуствует
		//			Физлицо
		//		если ВыбираемыеДанные содержит строку "Работники"
		//			Подразделение
		//			Должность
		//			ГрафикРаботы
		//			ЗанимаемыхСтавок
		//		если ВыбираемыеДанные содержит строку "УчетЗаработкаРаботников"
		//			СпособОтраженияВУпрУчете
		//			УчетНачисленийПоОрганизации
		//

		public object СведенияПоВыбранномуРаботнику(/*Сотрудник, ВыбираемыеДанные*/)
		{
			/*// Получим данные из среза последних
*/
			//ВыбиратьРаботники = Найти(ВыбираемыеДанные, "Работники") > 0;
			//ВыбиратьУчетЗаработкаРаботников = Найти(ВыбираемыеДанные, "УчетЗаработкаРаботников") > 0;
			//Запрос = Новый Запрос;
			if(true/*ВыбиратьРаботники*/)
			{
				if(true/*Не ВыбиратьУчетЗаработкаРаботников*/)
				{
					/*Запрос.Текст = 
			"ВЫБРАТЬ
			|	&Сотрудник КАК Сотрудник,
			|	Работники.Подразделение,
			|	Работники.Должность,
			|	Работники.ГрафикРаботы,
			|	Работники.ЗанимаемыхСтавок
			|ИЗ
			|	РегистрСведений.Работники.СрезПоследних(
			|		,
			|		Физлицо В
			|			(ВЫБРАТЬ
			|				СотрудникиОрганизаций.Физлицо
			|			ИЗ
			|				Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
			|			ГДЕ
			|				СотрудникиОрганизаций.Ссылка = &Сотрудник)) КАК Работники";*/
				}
			}
			//Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
			//Результат = Запрос.Выполнить();
			if(true/*Результат.Пустой()*/)
			{
			}
			return null;
		}
		// СведенияПоВыбранномуРаботнику
		// Открывает форму ввода на основании
		//

		public void ВводРегламентированногоКадровогоДокументаНаОсновании(/*Основание*/)
		{
			if(true/*Основание = Неопределено*/)
			{
			}
			//ФормаВводаНаОсновании = Обработки.ВводРегламентированныхКадровыхДокументовНаОсновании.ПолучитьФорму();
			//ФормаВводаНаОсновании.Основание = Основание;
			//ФормаВводаНаОсновании.Открыть();
		}

		public void ПолучитьОшибкиПериодовРаботыСотрудникаБезДоговора(/*Регистратор, УчитыватьРегистратор, МассивФизлица, СообщенияОбОшибках, ОшибкиПериодов*/)
		{
			//Запрос = Новый Запрос;
			//ТаблицаПериодов = ПроцедурыУправленияПерсоналом.ПериодыИспользованияРесурсов("ПериодыРаботыРаботников", , , "Периоды.Физлицо В (&Физлица)", УчитыватьРегистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	Регистратор1,
	|	Регистратор2,
	|	ПРЕДСТАВЛЕНИЕ(Регистратор1) КАК ПредставлениеРегистратор1,
	|	ПРЕДСТАВЛЕНИЕ(Регистратор2) КАК ПредставлениеРегистратор2,
	|	Физлицо,
	|	Физлицо.Наименование КАК ФизлицоНаименование,
	|	ДатаНачала,
	|	ДатаОкончания
	|ИЗ
	|	(" + ТаблицаПериодов + ") КАК Периоды
	|УПОРЯДОЧИТЬ ПО
	|	ФизлицоНаименование,
	|	ДатаНачала";*/
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			//Запрос.УстановитьПараметр("Физлица",		МассивФизлица);
			//Выборка = Запрос.Выполнить().Выбрать();
			/*// обработаем периоды
*/
			//ТекущееФизлицо						= Неопределено;
			//ПоследняяДатаНачала					= '0001-01-01';
			//ПоследняяДатаОкончания				= '0001-01-01';
			//ПоследнийРегистратор1				= Неопределено;
			//ПоследнийРегистратор2				= Неопределено;
			//ПоследнийПредставлениеРегистратор1	= "";
			//ПоследнийПредставлениеРегистратор2	= "";
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*ТекущееФизлицо <> Выборка.Физлицо*/)
				{
					//ТекущееФизлицо = Выборка.Физлицо;
				}
				//ПоследнийРегистратор1				= Выборка.Регистратор1;
				//ПоследнийРегистратор2				= Выборка.Регистратор2;
				//ПоследнийПредставлениеРегистратор1	= Выборка.ПредставлениеРегистратор1;
				/*;
		ПоследнийПредставлениеРегистратор2	= Выборка.ПредставлениеРегистратор2;*/
				//ПоследняяДатаНачала					= Выборка.ДатаНачала;
				//ПоследняяДатаОкончания				= Выборка.ДатаОкончания;
			}
			//;;
		}

		public object ПериодыИспользованияПомещений(/*ДатаНачала = Неопределено, ДатаОкончания = Неопределено, Условие = "", УчитыватьРегистратор = Истина*/)
		{
			/*Текст =
	"ВЫБРАТЬ
	|	Периоды.Регистратор,
	|	Периоды.Помещение,
	|	Периоды.ДатаНачала,
	|	Периоды.ДатаОкончания
	|ИЗ
	|	РегистрСведений.ПериодыЗанятостиПомещений КАК Периоды
	|ГДЕ
	|	Периоды.ДатаНачала <> ДАТАВРЕМЯ(1,1,1)
	|	И Периоды.ДатаОкончания <> ДАТАВРЕМЯ(1,1,1)";*/
			if(true/*Не ПустаяСтрока(Условие)*/)
			{
				/*Текст = Текст + "
	|	И " + Условие;*/
			}
			if(true/*Не УчитыватьРегистратор*/)
			{
				/*Текст = Текст + "
	|	И Периоды.Регистратор <> &Регистратор";*/
			}
			if(true/*ДатаНачала <> Неопределено ИЛИ ДатаОкончания <> Неопределено*/)
			{
				/*Текст = Текст + "
	|	И (";*/
			}
			if(true/*ДатаНачала <> Неопределено*/)
			{
				/*Текст = Текст + "Периоды.ДатаНачала >= &" + ДатаНачала + "
	|	";*/
			}
			if(true/*ДатаОкончания <> Неопределено*/)
			{
				if(true/*ДатаНачала <> Неопределено*/)
				{
					//Текст = Текст + "И ";
				}
				/*Текст = Текст + "Периоды.ДатаНачала <= &" + ДатаОкончания + "
	|	";*/
			}
			if(true/*ДатаНачала <> Неопределено*/)
			{
				/*Текст = Текст + "ИЛИ &ДатаНачала >= Периоды.ДатаНачала
	|	И &ДатаНачала <= Периоды.ДатаОкончания";*/
			}
			if(true/*ДатаНачала <> Неопределено ИЛИ ДатаОкончания <> Неопределено*/)
			{
				//Текст = Текст + ")";
			}
			return null;
		}

		public void ПолучитьОшибкиПериодовЗанятостиПомещения(/*Регистратор, УчитыватьРегистратор, МассивПомешения, СообщенияОбОшибках, ДатаНачала = Неопределено, ДатаОкончания = Неопределено*/)
		{
			//ТекстДатаНачала		= Неопределено;
			//ТекстДатаОкончания	= Неопределено;
			if(true/*ЗначениеЗаполнено(ДатаНачала)*/)
			{
				//ТекстДатаНачала		= "ДатаНачала";
			}
			if(true/*ЗначениеЗаполнено(ДатаОкончания)*/)
			{
				//ТекстДатаОкончания	= "ДатаОкончания";
			}
			//Запрос = Новый Запрос;
			//ТаблицаПериодов = ПериодыИспользованияПомещений(ТекстДатаНачала, ТекстДатаОкончания, "Периоды.Помещение В (&Помещения)", УчитыватьРегистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	Регистратор,
	|	ПРЕДСТАВЛЕНИЕ(Регистратор) КАК ПредставлениеРегистратор,
	|	Помещение,
	|	Помещение.Наименование КАК ПомещениеНаименование,
	|	ДатаНачала,
	|	ДатаОкончания
	|ИЗ
	|	(" + ТаблицаПериодов + ") КАК Периоды
	|УПОРЯДОЧИТЬ ПО
	|	ПомещениеНаименование,
	|	ДатаНачала";*/
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			//Запрос.УстановитьПараметр("Помещения",		МассивПомешения);
			//Запрос.УстановитьПараметр("ДатаНачала",		ДатаНачала);
			//Запрос.УстановитьПараметр("ДатаОкончания",	ДатаОкончания);
			//Выборка = Запрос.Выполнить().Выбрать();
			/*// обработаем периоды
*/
			//ТекущееПомещение					= Неопределено;
			//ПоследняяДатаНачала					= '0001-01-01';
			//ПоследняяДатаОкончания				= '0001-01-01';
			//ПоследнийРегистратор				= Неопределено;
			//ПоследнийПредставлениеРегистратор	= "";
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*ТекущееПомещение <> Выборка.Помещение*/)
				{
					//ТекущееПомещение = Выборка.Помещение;
				}
				//ПоследнийРегистратор				= Выборка.Регистратор;
				//ПоследнийПредставлениеРегистратор	= Выборка.ПредставлениеРегистратор;
				//ПоследняяДатаНачала					= Выборка.ДатаНачала;
				//ПоследняяДатаОкончания				= Выборка.ДатаОкончания;
			}
			//;;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ МЕХАНИЗМА ОСТАТКИ ОТПУСКОВ УПР. УЧЕТА
		// Процедура формирует временную таблицу, в которую записывает переданную таблицу периодов
		//

		public void ПодготовитьТаблицуПериодов(/*Запрос, ТаблицаПериодов, ИспользоватьФизлицо = Ложь, ЕстьРегистратор = Ложь*/)
		{
			//Запрос.УстановитьПараметр("Таблица",	ТаблицаПериодов);
			//ВключатьЗапланированныеОтпуска = ТаблицаПериодов.Колонки.Найти("План") <> Неопределено;
			//РеквизитПлан = ?(ВключатьЗапланированныеОтпуска, "ТаблицаПериодов.План,", "ЛОЖЬ КАК План,");
			if(true/*Не ИспользоватьФизлицо*/)
			{
				/*Запрос.Текст =
		"ВЫБРАТЬ
		|	" + РеквизитПлан + "
		|	ТаблицаПериодов.НомерСтроки,
		|	ТаблицаПериодов.Сотрудник,
		|	ТаблицаПериодов.ДатаНачала,
		|	ТаблицаПериодов.ДатаОкончания
		|ПОМЕСТИТЬ ВТТаблица
		|ИЗ
		|	&Таблица КАК ТаблицаПериодов";*/
				//Запрос.Выполнить();
				/*Запрос.Текст =
		"ВЫБРАТЬ
		|	" + РеквизитПлан + "
		|	ТаблицаПериодов.НомерСтроки,
		|	ТаблицаПериодов.Сотрудник.Физлицо КАК Сотрудник,
		|	ТаблицаПериодов.ДатаНачала,
		|	ТаблицаПериодов.ДатаОкончания
		|ПОМЕСТИТЬ ВТТаблицаПериодов
		|ИЗ
		|	ВТТаблица КАК ТаблицаПериодов
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Сотрудник,
		|	НомерСтроки";*/
				//Запрос.Выполнить();
			}
		}
		// Процедура формирует временную таблицу, которая содержит актуальные для таблицы периодов остатки
		//
		// Так как функция вспомогательная, вызываться будет из процедуры, в которой во временную таблицу
		// уже помещена таблица периодов. Поэтому, в функцию передается запрос с этой таблицей
		//

		public void ПодготовитьТаблицуАктуальныхОстатков(/*Запрос, ИспользоватьОстатки*/)
		{
			if(true/*ИспользоватьОстатки*/)
			{
				/*Запрос.Текст =
		"ВЫБРАТЬ
		|	ОстаткиОтпусковОстатки.Ссылка,
		|	ОстаткиПериод.Физлицо КАК Физлицо,
		|	ОстаткиПериод.НомерСтроки КАК НомерСтроки,
		|	ОстаткиПериод.ДатаОстатков,
		|	ОстаткиОтпусковОстатки.Количество,
		|	ОстаткиОтпусковОстатки.ДатаНачалаРабочегоГода,
		|	ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода
		|ПОМЕСТИТЬ ВТАктуальныеОстатки
		|ИЗ
		|	(ВЫБРАТЬ
		|		ОстаткиОтпусковОстатки.Физлицо КАК Физлицо,
		|		ОстаткиОтпусковОстатки.НомерСтроки КАК НомерСтроки,
		|		МАКСИМУМ(ОстаткиОтпусковОстатки.ДатаОстатков) КАК ДатаОстатков
		|	ИЗ
		|		(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|			ОстаткиОтпусковОстатки.Ссылка КАК Ссылка,
		|			ОстаткиОтпусковОстатки.Ссылка.Физлицо КАК Физлицо,
		|			ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
		|			ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности КАК ДатаОстатков
		|		ИЗ
		|			Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
		|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодов КАК ТаблицаПериодов
		|				ПО ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода <= ТаблицаПериодов.ДатаОкончания
		|					И ОстаткиОтпусковОстатки.Ссылка.Физлицо = ТаблицаПериодов.Сотрудник) КАК ОстаткиОтпусковОстатки
		|			ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
		|				ОстаткиОтпусковОстатки.Ссылка КАК Ссылка,
		|				ТаблицаПериодов.НомерСтроки КАК НомерСтроки
		|			ИЗ
		|				Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
		|					ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодов КАК ТаблицаПериодов
		|					ПО ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода > ТаблицаПериодов.ДатаОкончания
		|						И ОстаткиОтпусковОстатки.Ссылка.Физлицо = ТаблицаПериодов.Сотрудник) КАК ОстаткиНеВключать
		|			ПО ОстаткиОтпусковОстатки.НомерСтроки = ОстаткиНеВключать.НомерСтроки
		|				И ОстаткиОтпусковОстатки.Ссылка = ОстаткиНеВключать.Ссылка
		|	ГДЕ
		|		ОстаткиНеВключать.Ссылка ЕСТЬ NULL 
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ОстаткиОтпусковОстатки.Физлицо,
		|		ОстаткиОтпусковОстатки.НомерСтроки) КАК ОстаткиПериод
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
		|		ПО ОстаткиПериод.ДатаОстатков = ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности
		|			И ОстаткиПериод.Физлицо = ОстаткиОтпусковОстатки.Ссылка.Физлицо
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Физлицо,
		|	НомерСтроки";*/
				//Запрос.Выполнить();
			}
		}
		// Функция возвращает список остатков отпусков для тех рабочих лет, по которым нет остатков в справочнике
		// Остатки отпусков
		// Включать текущий рабочий год необходимо, когда считаем остатки для списания фактического отпуска
		//

		public object ПолучитьДополнениеОстатков(/*
	Запрос,						// Объект запрос, в котором уже есть виртуальные таблицы ТаблицаПериодов и АктуальныеОстатки
	Регистратор,				// Регистратор, которым списывается отпуск
	ВключатьТекущийРабочийГод	// Значение Истина должно быть установлено всегда, когда передается регистратор
	*/)
		{
			/*// Объект запрос, в котором уже есть виртуальные таблицы ТаблицаПериодов и АктуальныеОстатки
*/
			/*// Регистратор, которым списывается отпуск
*/
			/*// Значение Истина должно быть установлено всегда, когда передается регистратор
*/
			/*// Получим дату приема по упр. сотрудникам
*/
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ТаблицаПериодов.Сотрудник КАК Физлицо,
	|	ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА ГОД(Работники.Период) < 1950
	|				ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1950, 1, 1), МЕСЯЦ, МЕСЯЦ(Работники.Период)), ДЕНЬ, ДЕНЬ(Работники.Период))
	|			ИНАЧЕ Работники.Период
	|		КОНЕЦ) КАК ДатаПриемаНаРаботу,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА (НЕ УволенныеРаботники.Период ЕСТЬ NULL )
	|				ТОГДА ДОБАВИТЬКДАТЕ(УволенныеРаботники.Период, ДЕНЬ, -1)
	|		КОНЕЦ) КАК ДатаУвольнения
	|ПОМЕСТИТЬ ВТУправленческиеРаботники
	|ИЗ
	|	ВТТаблицаПериодов КАК ТаблицаПериодов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Работники КАК Работники
	|		ПО ТаблицаПериодов.Сотрудник = Работники.ФизЛицо
	|			И ТаблицаПериодов.ДатаНачала >= Работники.Период
	|			И (Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу))
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Работники КАК УволенныеРаботники
	|		ПО ТаблицаПериодов.Сотрудник = УволенныеРаботники.ФизЛицо
	|			И ТаблицаПериодов.ДатаНачала >= УволенныеРаботники.Период
	|			И (УволенныеРаботники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))
	|
	|СГРУППИРОВАТЬ ПО
	|	ТаблицаПериодов.Сотрудник,
	|	ТаблицаПериодов.НомерСтроки
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Физлицо,
	|	НомерСтроки";*/
			//Запрос.Выполнить();
			/*// Получим дату приема по регл. сотрудникам, если сотрудник не принят по упр. учету
*/
			/*// Только основное место работы или внешний совместитель
*/
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ТаблицаПериодов.Сотрудник КАК Физлицо,
	|	ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА ГОД(РаботникиОрганизаций.Период) < 1950
	|				ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1950, 1, 1), МЕСЯЦ, МЕСЯЦ(РаботникиОрганизаций.Период)), ДЕНЬ, ДЕНЬ(РаботникиОрганизаций.Период))
	|			ИНАЧЕ РаботникиОрганизаций.Период
	|		КОНЕЦ) КАК ДатаПриемаНаРаботу,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА (НЕ УволенныеРаботникиОрганизаций.Период ЕСТЬ NULL )
	|				ТОГДА ДОБАВИТЬКДАТЕ(УволенныеРаботникиОрганизаций.Период, ДЕНЬ, -1)
	|		КОНЕЦ) КАК ДатаУвольнения
	|ПОМЕСТИТЬ ВТРегламентированныеРаботники
	|ИЗ
	|	ВТТаблицаПериодов КАК ТаблицаПериодов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
	|		ПО ТаблицаПериодов.Сотрудник = РаботникиОрганизаций.Сотрудник.Физлицо
	|			И (РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу))
	|			И ((НЕ (ТаблицаПериодов.Сотрудник, ТаблицаПериодов.НомерСтроки) В
	|					(ВЫБРАТЬ
	|						Работники.Физлицо,
	|						Работники.НомерСтроки
	|					ИЗ
	|						ВТУправленческиеРаботники КАК Работники)))
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК УволенныеРаботникиОрганизаций
	|		ПО ТаблицаПериодов.Сотрудник = УволенныеРаботникиОрганизаций.Сотрудник.Физлицо
	|			И (УволенныеРаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))
	|			И ((НЕ (ТаблицаПериодов.Сотрудник, ТаблицаПериодов.НомерСтроки) В
	|					(ВЫБРАТЬ
	|						Работники.Физлицо,
	|						Работники.НомерСтроки
	|					ИЗ
	|						ВТУправленческиеРаботники КАК Работники)))
	|
	|СГРУППИРОВАТЬ ПО
	|	ТаблицаПериодов.Сотрудник,
	|	ТаблицаПериодов.НомерСтроки
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Физлицо,
	|	НомерСтроки";*/
			//Запрос.Выполнить();
			/*// Объединим результаты двух запросов
*/
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	Работники.Физлицо КАК Физлицо,
	|	Работники.НомерСтроки КАК НомерСтроки,
	|	Работники.ДатаПриемаНаРаботу,
	|	Работники.ДатаУвольнения
	|ПОМЕСТИТЬ ВТВсеРаботники
	|ИЗ
	|	ВТУправленческиеРаботники КАК Работники
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Работники.Физлицо,
	|	Работники.НомерСтроки,
	|	Работники.ДатаПриемаНаРаботу,
	|	Работники.ДатаУвольнения
	|ИЗ
	|	ВТРегламентированныеРаботники КАК Работники
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Физлицо,
	|	НомерСтроки";*/
			//Запрос.Выполнить();
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ОстаткиОтпусков.Ссылка,
	|	ПоследнийРабочийГод.Физлицо,
	|	ПоследнийРабочийГод.ДатаНачалаРабочегоГода,
	|	ЕСТЬNULL(ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода, КОНЕЦПЕРИОДА(ПоследнийРабочийГод.ДатаНачалаРабочегоГода, ГОД)) КАК ДатаОкончанияРабочегоГода,
	|	ПоследнийРабочийГод.НомерСтроки КАК НомерСтроки,
	|	ПоследнийРабочийГод.ДатаПолученияДанных КАК ДатаПолученияДанных,
	|	ПоследнийРабочийГод.ДатаОстатков,
	|	ПоследнийРабочийГод.ДатаПриемаНаРаботу,
	|	ПоследнийРабочийГод.ДатаУвольнения
	|ИЗ
	|	(ВЫБРАТЬ
	|		Работники.Физлицо КАК Физлицо,
	|		МАКСИМУМ(ВЫБОР
	|				КОГДА ОстаткиОтпусков.ДатаОкончанияРабочегоГода ЕСТЬ NULL 
	|					ТОГДА Работники.ДатаПриемаНаРаботу
	|				ИНАЧЕ ДОБАВИТЬКДАТЕ(ОстаткиОтпусков.ДатаОкончанияРабочегоГода, ДЕНЬ, 1)
	|			КОНЕЦ) КАК ДатаНачалаРабочегоГода,
	|		ТаблицаПериодов.ДатаОкончания КАК ДатаПолученияДанных,
	|		ОстаткиОтпусков.ДатаОстатков КАК ДатаОстатков,
	|		ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
	|		Работники.ДатаПриемаНаРаботу КАК ДатаПриемаНаРаботу,
	|		Работники.ДатаУвольнения КАК ДатаУвольнения
	|	ИЗ
	|		ВТВсеРаботники КАК Работники
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодов КАК ТаблицаПериодов
	|				ЛЕВОЕ СОЕДИНЕНИЕ ВТАктуальныеОстатки КАК ОстаткиОтпусков
	|				ПО ТаблицаПериодов.Сотрудник = ОстаткиОтпусков.Физлицо
	|					И ТаблицаПериодов.НомерСтроки = ОстаткиОтпусков.НомерСтроки
	|			ПО Работники.Физлицо = ТаблицаПериодов.Сотрудник
	|				И Работники.НомерСтроки = ТаблицаПериодов.НомерСтроки
	|	
	|	СГРУППИРОВАТЬ ПО
	|		Работники.Физлицо,
	|		ТаблицаПериодов.НомерСтроки,
	|		ТаблицаПериодов.ДатаОкончания,
	|		ОстаткиОтпусков.ДатаОстатков,
	|		Работники.ДатаПриемаНаРаботу,
	|		Работники.ДатаУвольнения) КАК ПоследнийРабочийГод
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
	|		ПО ПоследнийРабочийГод.Физлицо = ОстаткиОтпусковОстатки.Ссылка.Физлицо
	|			И ПоследнийРабочийГод.ДатаНачалаРабочегоГода = ОстаткиОтпусковОстатки.ДатаНачалаРабочегоГода
	|			И ПоследнийРабочийГод.ДатаОстатков = ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусков КАК ОстаткиОтпусков
	|		ПО ПоследнийРабочийГод.Физлицо = ОстаткиОтпусков.Физлицо
	|			И ПоследнийРабочийГод.ДатаОстатков = ОстаткиОтпусков.ДатаАктуальности";*/
			if(true/*НЕ ВключатьТекущийРабочийГод*/)
			{
				/*Запрос.Текст = Запрос.Текст + "
	|ГДЕ
	|	ЕСТЬNULL(ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода, КОНЕЦПЕРИОДА(ПоследнийРабочийГод.ДатаНачалаРабочегоГода, ГОД)) < ПоследнийРабочийГод.ДатаПолученияДанных";*/
			}
			/*Запрос.Текст = Запрос.Текст + "
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			//ТаблицаОстатков = Новый ТаблицаЗначений;
			//ТаблицаОстатков.Колонки.Добавить("Ссылка",						Новый ОписаниеТипов("СправочникСсылка.ОстаткиОтпусков"));
			//ТаблицаОстатков.Колонки.Добавить("Физлицо",						Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаНачалаРабочегоГода",		Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаОкончанияРабочегоГода",	Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("НомерСтроки",					Новый ОписаниеТипов("Число"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаПолученияДанных",			Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаПриемаНаРаботу",			Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаОстатков",				Новый ОписаниеТипов("Дата"));
			while(true/*Выборка.Следующий()*/)
			{
				//ДатаНачалаРабочегоГода		= Выборка.ДатаНачалаРабочегоГода;
				//ДатаОкончанияРабочегоГода	= Выборка.ДатаОкончанияРабочегоГода;
				//ДатаОграничения = ?(Выборка.ДатаУвольнения = NULL ИЛИ Выборка.ДатаПолученияДанных < Выборка.ДатаУвольнения, Выборка.ДатаПолученияДанных, Выборка.ДатаУвольнения);
				/*// В цикле будем добавлять в таблицу все рабочие года по сотрудникам
*/
				while(true/*?(ВключатьТекущийРабочийГод, ДатаОкончанияРабочегоГода < ДобавитьМесяц(ДатаОграничения, 12), ДатаОкончанияРабочегоГода < ДатаОграничения)*/)
				{
					//Строка = ТаблицаОстатков.Добавить();
					//ЗаполнитьЗначенияСвойств(Строка, Выборка);
					//Строка.ДатаНачалаРабочегоГода		= ДатаНачалаРабочегоГода;
					//Строка.ДатаОкончанияРабочегоГода	= ДатаОкончанияРабочегоГода;
					//ДатаНачалаРабочегоГода		= ДатаОкончанияРабочегоГода + 1;
					//ДатаОкончанияРабочегоГода	= КонецГода(ДатаНачалаРабочегоГода);
				}
				//;;
			}
			/*;
	
	Запрос.УстановитьПараметр("ТаблицаОстатков",	ТаблицаОстатков);*/
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	Остатки.*
	|ПОМЕСТИТЬ ВТОстатки
	|ИЗ
	|	&ТаблицаОстатков КАК Остатки
	|ИНДЕКСИРОВАТЬ ПО
	|	Ссылка";*/
			//Запрос.Выполнить();
			//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ОстаткиОтпусков.Ссылка,
	|	ПоследнийРабочийГод.Физлицо КАК Физлицо,
	|	ПоследнийРабочийГод.ДатаНачалаРабочегоГода КАК ДатаНачалаРабочегоГода,
	|	ПоследнийРабочийГод.ДатаОкончанияРабочегоГода КАК ДатаОкончанияРабочегоГода,
	|	СУММА(ЕСТЬNULL(ФактическиеОтпуска.Количество, 0)) КАК ФактическийОтпуск,
	|	ЕСТЬNULL(УчетнаяПолитикаПоПерсоналу.КоличествоДнейОтпускаВГод, 20) / 12 * (РАЗНОСТЬДАТ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода, ВЫБОР
	|			КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|				ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|			ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|		КОНЕЦ, МЕСЯЦ) + ВЫБОР
	|		КОГДА ДЕНЬ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода) <= ДЕНЬ(ВЫБОР
	|					КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|						ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|					ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|				КОНЕЦ)
	|			ТОГДА ВЫБОР
	|					КОГДА ДЕНЬ(ВЫБОР
	|								КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|									ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|								ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|							КОНЕЦ) - ДЕНЬ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода) > ДЕНЬ(КОНЕЦПЕРИОДА(ВЫБОР
	|									КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|										ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|									ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|								КОНЕЦ, МЕСЯЦ)) / 2 - 1
	|						ТОГДА 1
	|					ИНАЧЕ 0
	|				КОНЕЦ
	|		ИНАЧЕ ВЫБОР
	|				КОГДА ДЕНЬ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода) - ДЕНЬ(ВЫБОР
	|							КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|								ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|							ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|						КОНЕЦ) > ДЕНЬ(КОНЕЦПЕРИОДА(ВЫБОР
	|								КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|									ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|								ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|							КОНЕЦ, МЕСЯЦ)) / 2 - 1
	|					ТОГДА -1
	|				ИНАЧЕ 0
	|			КОНЕЦ
	|	КОНЕЦ) КАК КоличествоДнейОтпускаВГод,
	|	ПоследнийРабочийГод.НомерСтроки КАК НомерСтроки,
	|	ПоследнийРабочийГод.ДатаПриемаНаРаботу,
	|	ПоследнийРабочийГод.ДатаПолученияДанных,
	|	ПоследнийРабочийГод.ДатаОстатков
	|ИЗ
	|	ВТОстатки КАК ПоследнийРабочийГод
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусков КАК ОстаткиОтпусков
	|		ПО ПоследнийРабочийГод.Ссылка = ОстаткиОтпусков.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусков.Остатки КАК ОстаткиОтпусковОстатки
	|		ПО ПоследнийРабочийГод.Ссылка = ОстаткиОтпусковОстатки.Ссылка
	|			И ПоследнийРабочийГод.ДатаНачалаРабочегоГода = ОстаткиОтпусковОстатки.ДатаНачалаРабочегоГода
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска
	|		ПО ПоследнийРабочийГод.Физлицо = ФактическиеОтпуска.Физлицо
	|			И (ВЫБОР
	|				КОГДА ПоследнийРабочийГод.ДатаОкончанияРабочегоГода <= ПоследнийРабочийГод.ДатаПолученияДанных
	|					ТОГДА ФактическиеОтпуска.ДатаОкончания МЕЖДУ ПоследнийРабочийГод.ДатаНачалаРабочегоГода И ПоследнийРабочийГод.ДатаОкончанияРабочегоГода
	|				ИНАЧЕ ФактическиеОтпуска.ДатаОкончания МЕЖДУ ПоследнийРабочийГод.ДатаНачалаРабочегоГода И ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаПолученияДанных, ДЕНЬ, -1)
	|			КОНЕЦ)
	|			И (ФактическиеОтпуска.Регистратор <> &Регистратор)
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетнаяПолитикаПоПерсоналу КАК УчетнаяПолитикаПоПерсоналу
	|		ПО (ИСТИНА)
	|
	|СГРУППИРОВАТЬ ПО
	|	ОстаткиОтпусков.Ссылка,
	|	ПоследнийРабочийГод.Физлицо,
	|	ПоследнийРабочийГод.ДатаНачалаРабочегоГода,
	|	ПоследнийРабочийГод.ДатаОкончанияРабочегоГода,
	|	ПоследнийРабочийГод.НомерСтроки,
	|	ПоследнийРабочийГод.ДатаПриемаНаРаботу,
	|	ПоследнийРабочийГод.ДатаПолученияДанных,
	|	ПоследнийРабочийГод.ДатаОстатков,
	|	ЕСТЬNULL(УчетнаяПолитикаПоПерсоналу.КоличествоДнейОтпускаВГод, 20) / 12 * (РАЗНОСТЬДАТ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода, ВЫБОР
	|			КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|				ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|			ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|		КОНЕЦ, МЕСЯЦ) + ВЫБОР
	|		КОГДА ДЕНЬ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода) <= ДЕНЬ(ВЫБОР
	|					КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|						ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|					ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|				КОНЕЦ)
	|			ТОГДА ВЫБОР
	|					КОГДА ДЕНЬ(ВЫБОР
	|								КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|									ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|								ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|							КОНЕЦ) - ДЕНЬ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода) > ДЕНЬ(КОНЕЦПЕРИОДА(ВЫБОР
	|									КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|										ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|									ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|								КОНЕЦ, МЕСЯЦ)) / 2 - 1
	|						ТОГДА 1
	|					ИНАЧЕ 0
	|				КОНЕЦ
	|		ИНАЧЕ ВЫБОР
	|				КОГДА ДЕНЬ(ПоследнийРабочийГод.ДатаНачалаРабочегоГода) - ДЕНЬ(ВЫБОР
	|							КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|								ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|							ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|						КОНЕЦ) > ДЕНЬ(КОНЕЦПЕРИОДА(ВЫБОР
	|								КОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1) <= ПоследнийРабочийГод.ДатаПолученияДанных
	|									ТОГДА ДОБАВИТЬКДАТЕ(ПоследнийРабочийГод.ДатаОкончанияРабочегоГода, СЕКУНДА, 1)
	|								ИНАЧЕ ПоследнийРабочийГод.ДатаПолученияДанных
	|							КОНЕЦ, МЕСЯЦ)) / 2 - 1
	|					ТОГДА -1
	|				ИНАЧЕ 0
	|			КОНЕЦ
	|	КОНЕЦ)
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки,
	|	ДатаНачалаРабочегоГода";*/
			return null;
		}
		// ПолучитьДополнениеОстатков()
		// Функция возвращает остаток отпусков
		// Функция также сообщает, являются ли хранимые в системе остатки актуальными,
		// то есть введены остатки по всем рабочим годам до даты, на которую получаются остатки
		//

		public object ПодготовитьДанныеПоУправленческимОтпускам(/*
	ТаблицаПериодов,						// Таблица периодов, для которой рассчитываем данные по отпускам
	ИспользоватьФизлицо = Ложь,				// В документах храним сотрудника, а из кода передаем физлицо
	Регистратор = Неопределено,				// Регистратор, которым списывается отпуск
	ВключатьЗапланированныеОтпуска = Ложь,	// Позволяет рассчитать остатко отпуска с учетом запланированных в будущем отпусков
	ИспользоватьОстатки = Истина,			// Ложь только в случае, если необходимо пересчитать остатки из формы элемента справочника остатков
	ВключатьТекущийРабочийГод = Истина		// Значение Истина должно быть установлено всегда, когда передается регистратор
	*/)
		{
			/*// Таблица периодов, для которой рассчитываем данные по отпускам
*/
			/*// В документах храним сотрудника, а из кода передаем физлицо
*/
			/*// Регистратор, которым списывается отпуск
*/
			/*// Позволяет рассчитать остатко отпуска с учетом запланированных в будущем отпусков
*/
			/*// Ложь только в случае, если необходимо пересчитать остатки из формы элемента справочника остатков
*/
			/*// Значение Истина должно быть установлено всегда, когда передается регистратор
*/
			/*) Экспорт
	
	Запрос = Новый Запрос;*/
			//Запрос.МенеджерВременныхТаблиц	= Новый МенеджерВременныхТаблиц;
			/*// Подготовим временную таблицу со списком периодов
*/
			//ПодготовитьТаблицуПериодов(Запрос, ТаблицаПериодов, ИспользоватьФизлицо, Регистратор <> Неопределено);
			/*// Подготовим временную таблицу с актуальными остатками
*/
			//ПодготовитьТаблицуАктуальныхОстатков(Запрос, ИспользоватьОстатки);
			//ТаблицаОстатков = Новый ТаблицаЗначений;
			//ТаблицаОстатков.Колонки.Добавить("Ссылка",						Новый ОписаниеТипов("СправочникСсылка.ОстаткиОтпусков"));
			//ТаблицаОстатков.Колонки.Добавить("Физлицо",						Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
			//ТаблицаОстатков.Колонки.Добавить("НомерСтроки",					Новый ОписаниеТипов("Число"));
			//ТаблицаОстатков.Колонки.Добавить("Количество",					Новый ОписаниеТипов("Число", , Новый КвалификаторыЧисла(7, 3)));
			//ТаблицаОстатков.Колонки.Добавить("ДатаНачалаРабочегоГода",		Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаОкончанияРабочегоГода",	Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("НеАктуальный",				Новый ОписаниеТипов("Булево"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаПриемаНаРаботу",			Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаПолученияДанных",			Новый ОписаниеТипов("Дата"));
			//ТаблицаОстатков.Колонки.Добавить("ДатаОстатков",				Новый ОписаниеТипов("Дата"));
			/*// Получим текущие наиболее актуальные остатки отпусков
*/
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ОстаткиОтпусков.*
	|ИЗ
	|	ВТАктуальныеОстатки КАК ОстаткиОтпусков
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки,
	|	ДатаНачалаРабочегоГода";*/
			//ТекущиеОстатки = Запрос.Выполнить().Выгрузить();
			/*// Теперь дополним существующие в системе остатки
*/
			/*// Остатки будут дополнены по тем рабочим годам, которые в остатках не значатся
*/
			/*// Кроме того, если будет включен текущий рабочий год, запрос ВСЕГДА вернет запись
*/
			/*// за текущий рабочий год. Это позволит посчитать текущий остаток с учетом уже отгуленных
*/
			//Выборка = ПолучитьДополнениеОстатков(Запрос, Регистратор, ВключатьТекущийРабочийГод);
			//ОстаткиТекущейСтроки = ТекущиеОстатки.СкопироватьКолонки();
			/*// Добавим свою колонку количество с нужным количеством знаков после запятой
*/
			//ОстаткиТекущейСтроки.Колонки.Удалить(ОстаткиТекущейСтроки.Колонки.Индекс(ОстаткиТекущейСтроки.Колонки["Количество"]));
			//ОстаткиТекущейСтроки.Колонки.Добавить("Количество",	Новый ОписаниеТипов("Число", , Новый КвалификаторыЧисла(7, 3)));
			while(true/*Выборка.СледующийПоЗначениюПоля("НомерСтроки")*/)
			{
				//НайденныеОстатки = ТекущиеОстатки.НайтиСтроки(Новый Структура("НомерСтроки", Выборка.НомерСтроки));
				//ОстаткиТекущейСтроки.Очистить();
				while(true/*Выборка.Следующий()*/)
				{
					//ФактическийОтпускДляСписания = Выборка.ФактическийОтпуск;
					//КопияОстатков = ОстаткиТекущейСтроки.Скопировать();
					//ОстаткиТекущейСтроки.Очистить();
					//Строка = ОстаткиТекущейСтроки.Добавить();
					//ЗаполнитьЗначенияСвойств(Строка, Выборка);
					//Строка.Количество	= Выборка.КоличествоДнейОтпускаВГод - ФактическийОтпускДляСписания;
				}
			}
			//Запрос.УстановитьПараметр("ТаблицаОстатков",	ТаблицаОстатков);
			if(true/*ВключатьЗапланированныеОтпуска*/)
			{
				//Запрос.УстановитьПараметр("Регистратор",	Регистратор);
				//Запрос.УстановитьПараметр("РабочаяДата",	ОбщегоНазначения.ПолучитьРабочуюДату());
				/*Запрос.Текст =
		"ВЫБРАТЬ
		|	ПланированиеОтпускаРаботники.План КАК План,
		|	ПланированиеОтпускаРаботники.НомерСтроки КАК НомерСтроки,
		|	ПланированиеОтпускаРаботники.Сотрудник КАК Сотрудник,
		|	ПланированиеОтпускаРаботники.ДатаНачала КАК ДатаНачала,
		|	ПланированиеОтпускаРаботники.ДатаОкончания КАК ДатаОкончания
		|ПОМЕСТИТЬ ВТТаблицаПериодовПлан
		|ИЗ
		|	ВТТаблицаПериодов КАК ПланированиеОтпускаРаботники
		|ГДЕ
		|	ПланированиеОтпускаРаботники.План
		|	И ПланированиеОтпускаРаботники.ДатаНачала >= &РабочаяДата
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Сотрудник,
		|	ДатаНачала,
		|	ДатаОкончания
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ПланированиеОтпуска.НомерСтроки КАК НомерСтроки,
		|	ПланированиеОтпуска.Физлицо КАК Физлицо,
		|	СУММА(ПланированиеОтпуска.ДнейЗапланированногоОтпуска) КАК ДнейЗапланированногоОтпуска
		|ПОМЕСТИТЬ ВТЗапланированныеОтпуска
		|ИЗ
		|	(ВЫБРАТЬ
		|		ПланированиеОтпускаРаботники.НомерСтроки КАК НомерСтроки,
		|		ПланированиеОтпускаРаботники.Сотрудник КАК Физлицо,
		|		РегламентированныйПроизводственныйКалендарь.Пятидневка КАК ДнейЗапланированногоОтпуска
		|	ИЗ
		|		ВТТаблицаПериодовПлан КАК ПланированиеОтпускаРаботники
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодовПлан КАК ТаблицаПериодов
		|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
		|				ПО (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ТаблицаПериодов.ДатаНачала И ТаблицаПериодов.ДатаОкончания)
		|			ПО ПланированиеОтпускаРаботники.Сотрудник = ТаблицаПериодов.Сотрудник
		|				И ПланированиеОтпускаРаботники.ДатаНачала > ТаблицаПериодов.ДатаНачала";*/
				if(true/*Регистратор <> Неопределено*/)
				{
					/*Запрос.Текст = Запрос.Текст + "
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		ТаблицаПериодов.НомерСтроки,
		|		СобытийныйПланЗанятостиФизлиц.ФизЛицо,
		|		РегламентированныйПроизводственныйКалендарь.Пятидневка
		|	ИЗ
		|		РегистрСведений.СобытийныйПланЗанятостиФизлиц КАК СобытийныйПланЗанятостиФизлиц
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
		|			ПО (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ СобытийныйПланЗанятостиФизлиц.Период И СобытийныйПланЗанятостиФизлиц.ПериодЗавершения)
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодов КАК ТаблицаПериодов
		|			ПО СобытийныйПланЗанятостиФизлиц.ФизЛицо = ТаблицаПериодов.Сотрудник
		|				И (СобытийныйПланЗанятостиФизлиц.Период >= &РабочаяДата)
		|				И СобытийныйПланЗанятостиФизлиц.Период < ТаблицаПериодов.ДатаНачала
		|				И (СобытийныйПланЗанятостиФизлиц.Регистратор <> &Регистратор)";*/
				}
				/*Запрос.Текст = Запрос.Текст + "
		|		) КАК ПланированиеОтпуска
		|
		|СГРУППИРОВАТЬ ПО
		|	ПланированиеОтпуска.НомерСтроки,
		|	ПланированиеОтпуска.Физлицо
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	НомерСтроки,
		|	Физлицо";*/
			}
			//Запрос.Выполнить();
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	ПоследнийРабочийГод.Ссылка,
	|	ПоследнийРабочийГод.Физлицо КАК Физлицо,
	|	ПоследнийРабочийГод.НомерСтроки КАК НомерСтроки,
	|	ПоследнийРабочийГод.ДатаНачалаРабочегоГода,
	|	ПоследнийРабочийГод.ДатаОкончанияРабочегоГода,
	|	ПоследнийРабочийГод.НеАктуальный,
	|	ПоследнийРабочийГод.ДатаПриемаНаРаботу,
	|	ПоследнийРабочийГод.ДатаПолученияДанных КАК ДатаПолученияДанных,
	|	ПоследнийРабочийГод.ДатаОстатков,
	|	(ВЫРАЗИТЬ(ПоследнийРабочийГод.Количество КАК ЧИСЛО(3, 0))) + ВЫБОР
	|		КОГДА (ВЫРАЗИТЬ(ПоследнийРабочийГод.Количество КАК ЧИСЛО(3, 0))) < ПоследнийРабочийГод.Количество
	|			ТОГДА 1
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК Количество
	|ПОМЕСТИТЬ ВТПоследнийРабочийГод
	|ИЗ
	|	&ТаблицаОстатков КАК ПоследнийРабочийГод
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	НомерСтроки,
	|	Физлицо,
	|	ДатаПолученияДанных
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
	|	ТаблицаПериодов.Сотрудник КАК Физлицо,
	|	ТаблицаПериодов.ДатаОкончания КАК ДатаОкончания,
	|	СУММА(Остатки.Количество * ВЫБОР
	|			КОГДА Остатки.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	|				ТОГДА 1
	|			ИНАЧЕ -1
	|		КОНЕЦ) КАК КоличествоОстаток
	|ПОМЕСТИТЬ ВТДополнительныеОтпуска
	|ИЗ
	|	ВТТаблицаПериодов КАК ТаблицаПериодов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиДнейДополнительныхОтпусков КАК Остатки
	|		ПО ТаблицаПериодов.Сотрудник = Остатки.Физлицо
	|			И ТаблицаПериодов.ДатаОкончания > Остатки.Период
	|
	|СГРУППИРОВАТЬ ПО
	|	ТаблицаПериодов.НомерСтроки,
	|	ТаблицаПериодов.Сотрудник,
	|	ТаблицаПериодов.ДатаОкончания
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	НомерСтроки,
	|	Физлицо,
	|	ДатаОкончания
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПоследнийРабочийГод.Ссылка КАК Ссылка,
	|	ПоследнийРабочийГод.Физлицо КАК Физлицо,
	|	ПоследнийРабочийГод.НомерСтроки КАК НомерСтроки,
	|	ПоследнийРабочийГод.ДатаНачалаРабочегоГода,
	|	ПоследнийРабочийГод.ДатаОкончанияРабочегоГода,
	|	ПоследнийРабочийГод.НеАктуальный КАК НеАктуальный,
	|	ПоследнийРабочийГод.ДатаПриемаНаРаботу КАК ДатаПриемаНаРаботу,
	|	ПоследнийРабочийГод.ДатаПолученияДанных КАК ДатаПолученияДанных,
	|	ПоследнийРабочийГод.ДатаОстатков КАК ДатаОстатков,
	|	ПоследнийРабочийГод.Количество КАК Количество,
	|	ЕСТЬNULL(ОстаткиДнейДополнительныхОтпусковОстатки.КоличествоОстаток, 0) КАК ОстатокДополнительногоОтпуска,
	|	ЕСТЬNULL(ДанныеФактическогоОтпуска.ДнейОтпуска, 0) КАК ДнейОтпуска,
	|	ЕСТЬNULL(ПланированиеОтпуска.ДнейЗапланированногоОтпуска, 0) КАК ДнейЗапланированногоОтпуска,
	|	ДанныеФактическогоОтпуска.ДатаНачала КАК ДатаНачала,
	|	ДанныеФактическогоОтпуска.ДатаОкончания КАК ДатаОкончания,
	|	ВЫБОР
	|		КОГДА ДанныеФактическогоОтпуска.ДатаНачала > ПоследнийРабочийГод.ДатаОкончанияРабочегоГода
	|			ТОГДА ПоследнийРабочийГод.Количество
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК КоличествоДнейОтпускаБезТекущегоГода,
	|	0 КАК ОтпускВСчетЕжегодного,
	|	0 КАК ОтпускВСчетЕжегодногоБезТекущегоГода,
	|	0 КАК ОтпускВСчетДополнительного,
	|	0 КАК ОтпускАвансом,
	|	Мероприятия.Мероприятие.Наименование КАК Мероприятие
	|ИЗ
	|	ВТПоследнийРабочийГод КАК ПоследнийРабочийГод
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТДополнительныеОтпуска КАК ОстаткиДнейДополнительныхОтпусковОстатки
	|		ПО ПоследнийРабочийГод.НомерСтроки = ОстаткиДнейДополнительныхОтпусковОстатки.НомерСтроки
	|			И ПоследнийРабочийГод.Физлицо = ОстаткиДнейДополнительныхОтпусковОстатки.Физлицо
	|			И ПоследнийРабочийГод.ДатаПолученияДанных = ОстаткиДнейДополнительныхОтпусковОстатки.ДатаОкончания
	|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|			ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
	|			ТаблицаПериодов.Сотрудник КАК Сотрудник,
	|			СУММА(ЕСТЬNULL(РегламентированныйПроизводственныйКалендарь.Пятидневка, 0)) КАК ДнейОтпуска,
	|			ТаблицаПериодов.ДатаНачала КАК ДатаНачала,
	|			ТаблицаПериодов.ДатаОкончания КАК ДатаОкончания
	|		ИЗ
	|			ВТТаблицаПериодов КАК ТаблицаПериодов
	|				ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
	|				ПО (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ТаблицаПериодов.ДатаНачала И ТаблицаПериодов.ДатаОкончания)
	|		
	|		СГРУППИРОВАТЬ ПО
	|			ТаблицаПериодов.НомерСтроки,
	|			ТаблицаПериодов.Сотрудник,
	|			ТаблицаПериодов.ДатаНачала,
	|			ТаблицаПериодов.ДатаОкончания) КАК ДанныеФактическогоОтпуска
	|		ПО ПоследнийРабочийГод.НомерСтроки = ДанныеФактическогоОтпуска.НомерСтроки
	|			И ПоследнийРабочийГод.Физлицо = ДанныеФактическогоОтпуска.Сотрудник
	|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|			ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
	|			ТаблицаПериодов.Сотрудник КАК Сотрудник,
	|			МАКСИМУМ(Мероприятия.Ссылка) КАК Мероприятие
	|		ИЗ
	|			ВТТаблицаПериодов КАК ТаблицаПериодов
	|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Мероприятия КАК Мероприятия
	|				ПО (Мероприятия.ДатаНачала МЕЖДУ ТаблицаПериодов.ДатаНачала И ТаблицаПериодов.ДатаОкончания
	|						ИЛИ КОНЕЦПЕРИОДА(Мероприятия.ДатаОкончания, ДЕНЬ) МЕЖДУ ТаблицаПериодов.ДатаНачала И ТаблицаПериодов.ДатаОкончания
	|						ИЛИ ТаблицаПериодов.ДатаНачала МЕЖДУ Мероприятия.ДатаНачала И КОНЕЦПЕРИОДА(Мероприятия.ДатаОкончания, ДЕНЬ)
	|						ИЛИ ТаблицаПериодов.ДатаОкончания МЕЖДУ Мероприятия.ДатаНачала И КОНЕЦПЕРИОДА(Мероприятия.ДатаОкончания, ДЕНЬ))
	|		
	|		СГРУППИРОВАТЬ ПО
	|			ТаблицаПериодов.НомерСтроки,
	|			ТаблицаПериодов.Сотрудник) КАК Мероприятия
	|		ПО ПоследнийРабочийГод.НомерСтроки = Мероприятия.НомерСтроки
	|			И ПоследнийРабочийГод.Физлицо = Мероприятия.Сотрудник
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЗапланированныеОтпуска КАК ПланированиеОтпуска
	|		ПО ПоследнийРабочийГод.НомерСтроки = ПланированиеОтпуска.НомерСтроки
	|			И ПоследнийРабочийГод.Физлицо = ПланированиеОтпуска.Физлицо
	|
	|УПОРЯДОЧИТЬ ПО
	|	ПоследнийРабочийГод.НомерСтроки,
	|	ПоследнийРабочийГод.ДатаНачалаРабочегоГода
	|ИТОГИ
	|	МАКСИМУМ(Ссылка),
	|	МАКСИМУМ(Физлицо),
	|	МАКСИМУМ(НеАктуальный),
	|	МАКСИМУМ(ДатаПриемаНаРаботу),
	|	МАКСИМУМ(ДатаПолученияДанных),
	|	МАКСИМУМ(ДатаОстатков),
	|	СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) КАК Количество,
	|	МАКСИМУМ(ОстатокДополнительногоОтпуска),
	|	МАКСИМУМ(ДнейОтпуска),
	|	МАКСИМУМ(ДатаНачала),
	|	МАКСИМУМ(ДатаОкончания),
	|	СУММА(КоличествоДнейОтпускаБезТекущегоГода) - МАКСИМУМ(ДнейЗапланированногоОтпуска) КАК КоличествоДнейОтпускаБезТекущегоГода,
	|	ВЫБОР
	|		КОГДА СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|			ТОГДА 0
	|		КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|			ТОГДА МАКСИМУМ(ДнейОтпуска)
	|		ИНАЧЕ СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|	КОНЕЦ КАК ОтпускВСчетЕжегодного,
	|	ВЫБОР
	|		КОГДА СУММА(КоличествоДнейОтпускаБезТекущегоГода) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|			ТОГДА 0
	|		КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(КоличествоДнейОтпускаБезТекущегоГода) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|			ТОГДА МАКСИМУМ(ДнейОтпуска)
	|		ИНАЧЕ СУММА(КоличествоДнейОтпускаБезТекущегоГода) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|	КОНЕЦ КАК ОтпускВСчетЕжегодногоБезТекущегоГода,
	|	ВЫБОР
	|		КОГДА МАКСИМУМ(ДнейОтпуска) - ВЫБОР
	|				КОГДА СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|					ТОГДА 0
	|				КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|					ТОГДА МАКСИМУМ(ДнейОтпуска)
	|				ИНАЧЕ СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|			КОНЕЦ < МАКСИМУМ(ОстатокДополнительногоОтпуска)
	|			ТОГДА МАКСИМУМ(ДнейОтпуска) - ВЫБОР
	|					КОГДА СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|						ТОГДА 0
	|					КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|						ТОГДА МАКСИМУМ(ДнейОтпуска)
	|					ИНАЧЕ СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|				КОНЕЦ
	|		ИНАЧЕ МАКСИМУМ(ОстатокДополнительногоОтпуска)
	|	КОНЕЦ КАК ОтпускВСчетДополнительного,
	|	МАКСИМУМ(ДнейОтпуска) - ВЫБОР
	|		КОГДА СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|			ТОГДА 0
	|		КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|			ТОГДА МАКСИМУМ(ДнейОтпуска)
	|		ИНАЧЕ СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|	КОНЕЦ - ВЫБОР
	|		КОГДА МАКСИМУМ(ДнейОтпуска) - ВЫБОР
	|				КОГДА СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|					ТОГДА 0
	|				КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|					ТОГДА МАКСИМУМ(ДнейОтпуска)
	|				ИНАЧЕ СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|			КОНЕЦ < МАКСИМУМ(ОстатокДополнительногоОтпуска)
	|			ТОГДА МАКСИМУМ(ДнейОтпуска) - ВЫБОР
	|					КОГДА СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска) <= 0
	|						ТОГДА 0
	|					КОГДА МАКСИМУМ(ДнейОтпуска) < СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|						ТОГДА МАКСИМУМ(ДнейОтпуска)
	|					ИНАЧЕ СУММА(ПоследнийРабочийГод.Количество) - МАКСИМУМ(ДнейЗапланированногоОтпуска)
	|				КОНЕЦ
	|		ИНАЧЕ МАКСИМУМ(ОстатокДополнительногоОтпуска)
	|	КОНЕЦ КАК ОтпускАвансом,
	|	МАКСИМУМ(Мероприятие)
	|ПО
	|	НомерСтроки
	|АВТОУПОРЯДОЧИВАНИЕ";*/
			if(true/*Не ВключатьЗапланированныеОтпуска*/)
			{
			}
			/*// Дополнительный перебор значений необходим для того, что бы корректно учесть доп. отпуск в случаях
*/
			/*// когда мы планируем отпуск и не можем запросом определить, что дополнительный отпуск был списан
*/
			/*// В таблице будем хранить информацию о том, какие отпуска списали
*/
			//ТаблицаДопОтпусков = Новый ТаблицаЗначений;
			//ТаблицаДопОтпусков.Колонки.Добавить("Физлицо");
			//ТаблицаДопОтпусков.Колонки.Добавить("ДатаОкончания");
			//ТаблицаДопОтпусков.Колонки.Добавить("Количество");
			//Результат = Запрос.Выполнить();
			//ТаблицаОтпусков = Результат.Выгрузить().СкопироватьКолонки();
			//Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			while(true/*Выборка.Следующий()*/)
			{
				//ТекущийОтпуск = ТаблицаОтпусков.Добавить();
				//ЗаполнитьЗначенияСвойств(ТекущийОтпуск, Выборка);
				if(true/*Выборка.ОтпускВСчетДополнительного = 0*/)
				{
				}
				//СписанныеОстатки = ТаблицаДопОтпусков.НайтиСтроки(Новый Структура("Физлицо", Выборка.Физлицо));
				/*// Учтем ранее списанные остатки, уменьшив количество дней отпуска за счет дополнительного
*/
				/*// Если использовали доп. отпуск, учтем этот отпуск на будущее
*/
				if(true/*ТекущийОтпуск.ОтпускВСчетДополнительного > 0*/)
				{
					//Строка = ТаблицаДопОтпусков.Добавить();
					//Строка.Физлицо			= ТекущийОтпуск.Физлицо;
					//Строка.ДатаОкончания	= ТекущийОтпуск.ДатаОкончания;
					//Строка.Количество		= ТекущийОтпуск.ОтпускВСчетДополнительного;
				}
			}
			if(true/*ТаблицаДопОтпусков.Количество() = 0*/)
			{
				/*// дополнительные отпуска не списывались
*/
			}
			return null;
		}
		// ПодготовитьДанныеПоУправленческимОтпускам()
		// Процедура обновляет справочник ОстаткиОтпусков
		//

		public void ОбновитьОстаткиОтпусков(/**/)
		{
			//РабДата = НачалоДня(ОбщегоНазначения.ПолучитьРабочуюДату());
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("РабДата",	РабДата);
			/*Запрос.Текст =
	"ВЫБРАТЬ
	|	РаботникиСрезПоследних.ФизЛицо КАК Сотрудник
	|ИЗ
	|	РегистрСведений.Работники.СрезПоследних(&РабДата, ) КАК РаботникиСрезПоследних
	|ГДЕ
	|	РаботникиСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо
	|ИЗ
	|	РегистрСведений.РаботникиОрганизаций.СрезПоследних(
	|			&РабДата,
	|			(НЕ Сотрудник.Физлицо В
	|					(ВЫБРАТЬ РАЗЛИЧНЫЕ
	|						РаботникиСрезПоследних.ФизЛицо
	|					ИЗ
	|						РегистрСведений.Работники.СрезПоследних(&РабДата, ) КАК РаботникиСрезПоследних
	|					ГДЕ
	|						РаботникиСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)))) КАК РаботникиОрганизацийСрезПоследних
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
	|		ПО РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			//ТаблицаПериодов = Новый ТаблицаЗначений;
			//ТаблицаПериодов.Колонки.Добавить("НомерСтроки",				Новый ОписаниеТипов("Число"));
			//ТаблицаПериодов.Колонки.Добавить("Сотрудник",				Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
			//ТаблицаПериодов.Колонки.Добавить("ДатаНачала",				Новый ОписаниеТипов("Дата"));
			//ТаблицаПериодов.Колонки.Добавить("ДатаОкончания",			Новый ОписаниеТипов("Дата"));
			//НомерСтроки = 1;
			while(true/*Выборка.Следующий()*/)
			{
				//ТекущийПериод = ТаблицаПериодов.Добавить();
				//ТекущийПериод.НомерСтроки			= НомерСтроки;
				//ТекущийПериод.Сотрудник				= Выборка.Сотрудник;
				//ТекущийПериод.ДатаНачала			= РабДата;
				//ТекущийПериод.ДатаОкончания			= РабДата;
				//НомерСтроки = НомерСтроки + 1;
			}
			/*;
	
	Выборка = ПроцедурыУправленияПерсоналомДополнительный.ПодготовитьДанныеПоУправленческимОтпускам(ТаблицаПериодов, Истина, , , Истина, Ложь);*/
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*Не Выборка.НеАктуальный*/)
				{
				}
				if(true/*Выборка.ДатаОстатков >= РабДата*/)
				{
					//ОстаткиОтпусковОбъект = Выборка.Ссылка.ПолучитьОбъект();
					//ОстаткиОтпусковОбъект.Остатки.Очистить();
				}
				//ВыборкаПоОстаткам = Выборка.Выбрать();
				while(true/*ВыборкаПоОстаткам.Следующий()*/)
				{
					//ЗаполнитьЗначенияСвойств(ОстаткиОтпусковОбъект.Остатки.Добавить(), ВыборкаПоОстаткам);
				}
				/*;
		
		ОстаткиОтпусковОбъект.Остатки.Сортировать("ДатаНачалаРабочегоГода");*/
				//ОстаткиОтпусковОбъект.Записать();
			}
			//;;
		}

		public object ВернутьОписаниеОтпуска(/*ВыборкаПоОстаткам*/)
		{
			//Комментарий	= Строка(ВыборкаПоОстаткам.ДнейОтпуска) + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",ВыборкаПоОстаткам.ДнейОтпуска);
			//РасшифровкаКомментария = "";
			if(true/*ВыборкаПоОстаткам.ОтпускВСчетЕжегодногоБезТекущегоГода > 0*/)
			{
				//РасшифровкаКомментария = ", " + ВыборкаПоОстаткам.ОтпускВСчетЕжегодногоБезТекущегоГода + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",ВыборкаПоОстаткам.ОтпускВСчетЕжегодногоБезТекущегоГода) + " за счет отпусков прошлых лет";
			}
			if(true/*ВыборкаПоОстаткам.ОтпускВСчетДополнительного > 0*/)
			{
				if(true/*ПустаяСтрока(РасшифровкаКомментария)*/)
				{
					//РасшифровкаКомментария = ", ";
				}
				//РасшифровкаКомментария = РасшифровкаКомментария + Строка(ВыборкаПоОстаткам.ОтпускВСчетДополнительного) + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",ВыборкаПоОстаткам.ОтпускВСчетДополнительного) + " доп. отпуска";
			}
			if(true/*ВыборкаПоОстаткам.ОтпускАвансом > 0*/)
			{
				if(true/*ПустаяСтрока(РасшифровкаКомментария)*/)
				{
					//РасшифровкаКомментария = ", ";
				}
				//РасшифровкаКомментария = РасшифровкаКомментария + Строка(ВыборкаПоОстаткам.ОтпускАвансом) + " " + ОбщегоНазначения.ФормаМножественногоЧисла("день","дня","дней",ВыборкаПоОстаткам.ОтпускАвансом) + " в счет будущего периода";
			}
			//Комментарий = Комментарий + РасшифровкаКомментария;
			if(true/*ВыборкаПоОстаткам.ДатаПриемаНаРаботу > ДобавитьМесяц(ВыборкаПоОстаткам.ДатаПолученияДанных, -6)*/)
			{
				if(true/*Не ПустаяСтрока(Комментарий)*/)
				{
					//Комментарий = Комментарий + ". ";
				}
				//Комментарий = Комментарий + "Дата приема на работу: " + Формат(ВыборкаПоОстаткам.ДатаПриемаНаРаботу, "ДФ='д ММММ гггг ""года""'");
			}
			if(true/*ВыборкаПоОстаткам.Мероприятие <> NULL*/)
			{
				if(true/*Не ПустаяСтрока(Комментарий)*/)
				{
					//Комментарий = Комментарий + ". ";
				}
				//Комментарий = Комментарий + "Отпуск пересекается с мероприятием """ + ВыборкаПоОстаткам.Мероприятие + """";
			}
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ ОБЕСПЕЧЕНИЯ РАБОТЫ ФОРМ ДОКУМЕНТОВ
		// Функция ищет единственного сотрудника среди работников предприятия или организаций по
		//  началу его наименования
		//
		// Параметры
		//  СтандартнаяОбработка – параметр стандартной обработки события обработчика АвтоПодборТекста
		//	Режим – строка, определяет источники, из которых производится подбор
		//	Текст  - начальные буквы ФИО, текст из обработчика АвтоПодборТекста
		//	Организация – ссылка на организацию по которой подбирать сотрудников (работников)
		//	ВозвращатьФизлицо – параметр определяет, что должна вернуть функция, наименование Сотрудника или Физлица
		//	ТолькоАктуальных – параметр определяет, вести поиск среди всех сотрудников, или только актуальных
		//	Регистратор - при вызове из приема на работу передаем ссылку на текущий Документ
		//
		// Возвращаемое значение
		//  строка - наименование найденного сотрудника, физлица, если он единственный
		//

		public object ПодобратьФИОСотрудника(/*СтандартнаяОбработка, Режим, Знач Текст, Организация = Неопределено, ВозвращатьФизлицо = Ложь, ТолькоАктуальные = Истина, Регистратор = Неопределено, Подразделение = Неопределено*/)
		{
			//ТекстАвтоПодбора = "";
			//СтандартнаяОбработка = Ложь;
			//Запрос = Новый Запрос;
			/*// заменим спецсимволы
*/
			//Текст = СтрЗаменить(Текст, "~", "~~");
			//Текст = СтрЗаменить(Текст, "%", "~%");
			//Текст = СтрЗаменить(Текст, "_", "~_");
			//Текст = СтрЗаменить(Текст, "[", "~[");
			//Текст = СтрЗаменить(Текст, "-", "~-");
			//Текст = Текст+"%";
			//Запрос.УстановитьПараметр("Текст", Текст);
			if(true/*Режим = "Работники"*/)
			{
				//ПозицияСкобки = Найти(Текст,"(");
				if(true/*ПозицияСкобки <> 0*/)
				{
					//Текст = Лев(Текст, ПозицияСкобки - 1);
				}
				//Запрос.УстановитьПараметр("Текст", СокрП(Текст));
				if(true/*ЗначениеЗаполнено(Подразделение)*/)
				{
					//Запрос.УстановитьПараметр("Подразделение", Подразделение);
				}
				//Запрос.УстановитьПараметр("ДатаАктуальности", ОбщегоНазначения.ПолучитьРабочуюДату());
				//Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
				//ТекстУсловияНаАктуальность = "";
				if(true/*ТолькоАктуальные*/)
				{
					//ТекстУсловияНаАктуальность = " И СотрудникиОрганизаций.Актуальность";
				}
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	Работники.ФизЛицо,
		|	СотрудникиОрганизаций.Ссылка КАК Сотрудник,
		|	СотрудникиОрганизаций.ВидДоговора,
		|	ВЫБОР
		|		КОГДА СотрудникиОрганизаций.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоТрудовойДоговор
		|ПОМЕСТИТЬ ВТ_ФизическиеЛица
		|ИЗ
		|	(ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 2
		|		Работники.ФизЛицо КАК ФизЛицо
		|	ИЗ";*/
				if(true/*ЗначениеЗаполнено(Подразделение)*/)
				{
					/*Запрос.Текст = Запрос.Текст + "
			|	РегистрСведений.Работники.СрезПоследних(&ДатаАктуальности, ) КАК Работники
			|ГДЕ
			|	Работники.ФизЛицо.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~""
			|	И Работники.Подразделение = &Подразделение) КАК Работники";*/
				}
				/*Запрос.Текст = Запрос.Текст + "
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
		|		ПО Работники.ФизЛицо = СотрудникиОрганизаций.Физлицо
		|ГДЕ
		|	СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)" + ТекстУсловияНаАктуальность +"
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ЭтоТрудовойДоговор";*/
				//Запрос.Выполнить();
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	РаботникиОсновноеМесто.Сотрудник,
		|	РаботникиОсновноеМесто.Сотрудник.Физлицо КАК Физлицо,
		|	ВЫБОР
		|		КОГДА РаботникиОсновноеМесто.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоОсновноеМестоРаботы
		|ПОМЕСТИТЬ ВТ_Сотрудники_ТрудовойДоговор
		|ИЗ
		|	РегистрСведений.РаботникиОрганизаций.СрезПоследних(
		|			&ДатаАктуальности,
		|			Сотрудник В (ВЫБРАТЬ Сотрудник ИЗ ВТ_ФизическиеЛица ГДЕ ЭтоТрудовойДоговор)) КАК РаботникиОсновноеМесто
		|ГДЕ
		|	ВЫБОР
		|		КОГДА РаботникиОсновноеМесто.ПериодЗавершения <= &ДатаАктуальности
		|				И РаботникиОсновноеМесто.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
		|			ТОГДА РаботникиОсновноеМесто.ПричинаИзмененияСостоянияЗавершения
		|		ИНАЧЕ РаботникиОсновноеМесто.ПричинаИзмененияСостояния
		|	КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ЭтоОсновноеМестоРаботы,
		|	Физлицо";*/
				//Запрос.Выполнить();
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 2
		|	СписокСотрудников.Сотрудник.Наименование КАК Наименование,
		|	СписокСотрудников.Физлицо.Наименование КАК ФизлицоНаименование
		|ИЗ
		|	(ВЫБРАТЬ
		|		МАКСИМУМ(РаботникиОсновноеМесто.Сотрудник) КАК Сотрудник,
		|		РаботникиОсновноеМесто.Физлицо КАК Физлицо,
		|		1 КАК Приоритет
		|	ИЗ
		|		ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиОсновноеМесто
		|	
		|	ГДЕ
		|		РаботникиОсновноеМесто.ЭтоОсновноеМестоРаботы
		|	
		|	СГРУППИРОВАТЬ ПО
		|		РаботникиОсновноеМесто.Физлицо
		|	
		|	ОБЪЕДИНИТЬ
		|	
		|	ВЫБРАТЬ
		|		МАКСИМУМ(РаботникиСовместительство.Сотрудник),
		|		РаботникиСовместительство.Физлицо,
		|		2
		|	ИЗ
		|		ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиСовместительство
		|			
		|	ГДЕ
		|		НЕ РаботникиСовместительство.ЭтоОсновноеМестоРаботы
		|		
		|	СГРУППИРОВАТЬ ПО
		|		РаботникиСовместительство.Физлицо
		|		
		|	ОБЪЕДИНИТЬ
		|		
		|	ВЫБРАТЬ
		|		МАКСИМУМ(СотрудникиДУ.Сотрудник),
		|		СотрудникиДУ.Физлицо,
		|		ВЫБОР
		|			КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|				ТОГДА 3
		|			КОГДА СотрудникиДУ.ЭтоТрудовойДоговор
		|				ТОГДА 4
		|			ИНАЧЕ 5
		|		КОНЕЦ
		|	ИЗ
		|		ВТ_ФизическиеЛица КАК СотрудникиДУ
		|			
		|	СГРУППИРОВАТЬ ПО
		|		СотрудникиДУ.Физлицо,
		|		ВЫБОР
		|			КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|				ТОГДА 3
		|			КОГДА СотрудникиДУ.ЭтоТрудовойДоговор
		|				ТОГДА 4
		|			ИНАЧЕ 5
		|		КОНЕЦ) КАК СписокСотрудников
		|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|					СписокФизическихЛиц.Физлицо КАК Физлицо,
		|					МИНИМУМ(СписокФизическихЛиц.Приоритет) КАК Приоритет
		|				ИЗ
		|					(ВЫБРАТЬ
		|						РаботникиОсновноеМесто.Физлицо КАК Физлицо,
		|						1 КАК Приоритет
		|					ИЗ
		|						ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиОсновноеМесто
		|			
		|					ГДЕ
		|			  			РаботникиОсновноеМесто.ЭтоОсновноеМестоРаботы
		|					
		|					ОБЪЕДИНИТЬ
		|					
		|					ВЫБРАТЬ
		|						РаботникиСовместительство.Физлицо,
		|						2
		|					ИЗ
		|						ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиСовместительство
		|			
		|					ГДЕ
		|						НЕ РаботникиСовместительство.ЭтоОсновноеМестоРаботы
		|					
		|					ОБЪЕДИНИТЬ
		|					
		|					ВЫБРАТЬ
		|						СотрудникиДУ.Физлицо,
		|						ВЫБОР
		|							КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|								ТОГДА 3
		|							КОГДА СотрудникиДУ.ЭтоТрудовойДоговор
		|								ТОГДА 4
		|							ИНАЧЕ 5
		|						КОНЕЦ
		|					ИЗ
		|						ВТ_ФизическиеЛица КАК СотрудникиДУ) КАК СписокФизическихЛиц
		|				
		|				СГРУППИРОВАТЬ ПО
		|					СписокФизическихЛиц.Физлицо) КАК СписокФизическихЛиц
		|	ПО СписокСотрудников.Физлицо = СписокФизическихЛиц.Физлицо
		|		И СписокСотрудников.Приоритет = СписокФизическихЛиц.Приоритет";*/
			}
			//Выборка = Запрос.Выполнить().Выбрать();
			if(true/*Выборка.Количество() = 1*/)
			{
				//Выборка.Следующий();
				if(true/*ВозвращатьФизлицо*/)
				{
					//ТекстАвтоПодбора = Выборка.ФизлицоНаименование;
				}
			}
			return null;
		}
		// ПодобратьФИОСотрудника()
		// Функция ищет сотрудника среди работников предприятия или организаций по
		//  началу его наименования
		//
		// Параметры
		// 	СтандартнаяОбработка – параметр стандартной обработки события обработчика АвтоПодборТекста
		//	Режим – строка, определяет источники, из которых производится подбор
		//	Текст  - начальные буквы ФИО, текст из обработчика АвтоПодборТекста
		//	Организация – ссылка на организацию по которой подбирать сотрудников (работников)
		//	ВозвращатьФизлицо – параметр определяет, что должна вернуть функция, ссылку на Сотрудника или Физлицо
		//	ТолькоАктуальных – параметр определяет, вести поиск среди всех сотрудников, или только актуальных
		//	Регистратор - при вызове из приема на работу передаем ссылку на текущий Документ
		//
		// Возвращаемое значение
		//  СписокЗначений - список подходящих физлиц, если их найдено не более 50
		//  Неопределено - если найдено более 50 подходящих физлиц
		//

		public object ПодобратьСписокСотрудников(/*СтандартнаяОбработка, Режим, Знач Текст, НачальноеЗначение, Организация = Неопределено, ВозвращатьФизлицо = Ложь, ТолькоАктуальные = Истина, Регистратор = Неопределено, Подразделение = Неопределено*/)
		{
			if(true/*ПустаяСтрока(Текст)*/)
			{
			}
			//Запрос = Новый Запрос;
			/*// заменим спецсимволы
*/
			//Текст = СОКРЛП(Текст);
			//Текст = СтрЗаменить(Текст, "~", "~~");
			//Текст = СтрЗаменить(Текст, "%", "~%");
			//Текст = СтрЗаменить(Текст, "_", "~_");
			//Текст = СтрЗаменить(Текст, "[", "~[");
			//Текст = СтрЗаменить(Текст, "-", "~-");
			//Текст = Текст+"%";
			//Запрос.УстановитьПараметр("Текст", Текст);
			if(true/*Режим = "Работники"*/)
			{
				//ПозицияСкобки = Найти(Текст,"(");
				if(true/*ПозицияСкобки <> 0*/)
				{
					//Текст = Лев(Текст, ПозицияСкобки - 1);
				}
				//Запрос.УстановитьПараметр("Текст", СокрП(Текст));
				//Запрос.УстановитьПараметр("ДатаАктуальности", ОбщегоНазначения.ПолучитьРабочуюДату());
				if(true/*ЗначениеЗаполнено(Подразделение)*/)
				{
					//Запрос.УстановитьПараметр("Подразделение", Подразделение);
				}
				//Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
				//ТекстУсловияНаАктуальность = "";
				if(true/*ТолькоАктуальные*/)
				{
					//ТекстУсловияНаАктуальность = " И СотрудникиОрганизаций.Актуальность";
				}
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 51
		|	ФизическиеЛица.ФизЛицо,
		|	ФизическиеЛица.Сотрудник,
		|	ФизическиеЛица.ВидДоговора,
		|	ФизическиеЛица.ЭтоТрудовойДоговор КАК ЭтоТрудовойДоговор,
		|	ФизическиеЛица.НайденоПоНаименованию
		|ПОМЕСТИТЬ ВТ_ФизическиеЛица
		|ИЗ
		|	(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|		Работники.ФизЛицо КАК ФизЛицо,
		|		СотрудникиОрганизаций.Ссылка КАК Сотрудник,
		|		СотрудникиОрганизаций.ВидДоговора КАК ВидДоговора,
		|		ВЫБОР
		|			КОГДА СотрудникиОрганизаций.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|				ТОГДА ИСТИНА
		|			ИНАЧЕ ЛОЖЬ
		|		КОНЕЦ КАК ЭтоТрудовойДоговор,
		|		ИСТИНА КАК НайденоПоНаименованию
		|	ИЗ
		|		(ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 51
		|			Работники.ФизЛицо КАК ФизЛицо
		|		ИЗ";*/
				if(true/*ЗначениеЗаполнено(Подразделение)*/)
				{
					/*Запрос.Текст = Запрос.Текст + "
			|	РегистрСведений.Работники.СрезПоследних(&ДатаАктуальности, ) КАК Работники
			|ГДЕ
			|	Работники.ФизЛицо.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~""
			|	И Работники.Подразделение = &Подразделение) КАК Работники";*/
				}
				/*Запрос.Текст = Запрос.Текст + "
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
		|			ПО Работники.ФизЛицо = СотрудникиОрганизаций.Физлицо
		|	ГДЕ
		|		СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)" + ТекстУсловияНаАктуальность + "
		|	
		|	ОБЪЕДИНИТЬ
		|	
		|	ВЫБРАТЬ РАЗЛИЧНЫЕ
		|		Работники.ФизЛицо,
		|		СотрудникиОрганизаций.Ссылка,
		|		СотрудникиОрганизаций.ВидДоговора,
		|		ВЫБОР
		|			КОГДА СотрудникиОрганизаций.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|				ТОГДА ИСТИНА
		|			ИНАЧЕ ЛОЖЬ
		|		КОНЕЦ,
		|		ЛОЖЬ
		|	ИЗ
		|		(ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 51
		|			СотрудникиОрганизаций.Ссылка КАК Ссылка,
		|			СотрудникиОрганизаций.ВидДоговора КАК ВидДоговора,
		|			СотрудникиОрганизаций.Физлицо КАК Физлицо
		|		ИЗ
		|			Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
		|		ГДЕ
		|			СотрудникиОрганизаций.Код ПОДОБНО &Текст СПЕЦСИМВОЛ ""~""" + ТекстУсловияНаАктуальность + "
		|			И СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)";*/
				if(true/*ЗначениеЗаполнено(Подразделение)*/)
				{
					/*Запрос.Текст = Запрос.Текст + "
			|			И СотрудникиОрганизаций.ТекущееПодразделениеКомпании = &Подразделение";*/
				}
				/*Запрос.Текст = Запрос.Текст + "
		|		) КАК СотрудникиОрганизаций
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Работники КАК Работники
		|			ПО (Работники.ФизЛицо = СотрудникиОрганизаций.Физлицо)) КАК ФизическиеЛица
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ЭтоТрудовойДоговор";*/
				//Запрос.Выполнить();
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	РаботникиОсновноеМесто.Сотрудник,
		|	РаботникиОсновноеМесто.Сотрудник.Физлицо КАК Физлицо,
		|	ВЫБОР
		|		КОГДА РаботникиОсновноеМесто.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоОсновноеМестоРаботы,
		|	ВТ_ФизическиеЛица.НайденоПоНаименованию
		|ПОМЕСТИТЬ ВТ_Сотрудники_ТрудовойДоговор
		|ИЗ
		|	РегистрСведений.РаботникиОрганизаций.СрезПоследних(
		|			&ДатаАктуальности,
		|			Сотрудник В
		|				(ВЫБРАТЬ
		|					ВТ_ФизическиеЛица.Сотрудник
		|				ИЗ
		|					ВТ_ФизическиеЛица
		|				ГДЕ
		|					ВТ_ФизическиеЛица.ЭтоТрудовойДоговор)) КАК РаботникиОсновноеМесто
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ФизическиеЛица КАК ВТ_ФизическиеЛица
		|		ПО РаботникиОсновноеМесто.Сотрудник = ВТ_ФизическиеЛица.Сотрудник
		|ГДЕ
		|	ВЫБОР
		|			КОГДА РаботникиОсновноеМесто.ПериодЗавершения <= &ДатаАктуальности
		|					И РаботникиОсновноеМесто.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
		|				ТОГДА РаботникиОсновноеМесто.ПричинаИзмененияСостоянияЗавершения
		|			ИНАЧЕ РаботникиОсновноеМесто.ПричинаИзмененияСостояния
		|		КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ЭтоОсновноеМестоРаботы,
		|	Физлицо";*/
				//Запрос.Выполнить();
				/*Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 51
		|	СписокСотрудников.Сотрудник КАК Ссылка,
		|	СписокСотрудников.Сотрудник.Наименование КАК Наименование,
		|	СписокСотрудников.Сотрудник.Код КАК Код,
		|	СписокСотрудников.Физлицо КАК Физлицо,
		|	СписокСотрудников.Физлицо.Наименование КАК ФизлицоНаименование,
		|	СписокСотрудников.НайденоПоНаименованию КАК НайденоПоНаименованию
		|ИЗ
		|	(ВЫБРАТЬ
		|		МАКСИМУМ(РаботникиОсновноеМесто.Сотрудник) КАК Сотрудник,
		|		РаботникиОсновноеМесто.Физлицо КАК Физлицо,
		|		1 КАК Приоритет,
		|		МАКСИМУМ(РаботникиОсновноеМесто.НайденоПоНаименованию) КАК НайденоПоНаименованию
		|	ИЗ
		|		ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиОсновноеМесто
		|	ГДЕ
		|		РаботникиОсновноеМесто.ЭтоОсновноеМестоРаботы
		|	
		|	СГРУППИРОВАТЬ ПО
		|		РаботникиОсновноеМесто.Физлицо
		|	
		|	ОБЪЕДИНИТЬ
		|	
		|	ВЫБРАТЬ
		|		МАКСИМУМ(РаботникиСовместительство.Сотрудник),
		|		РаботникиСовместительство.Физлицо,
		|		2,
		|		МАКСИМУМ(РаботникиСовместительство.НайденоПоНаименованию)
		|	ИЗ
		|		ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиСовместительство
		|	ГДЕ
		|		(НЕ РаботникиСовместительство.ЭтоОсновноеМестоРаботы)
		|	
		|	СГРУППИРОВАТЬ ПО
		|		РаботникиСовместительство.Физлицо
		|	
		|	ОБЪЕДИНИТЬ
		|	
		|	ВЫБРАТЬ
		|		МАКСИМУМ(СотрудникиДУ.Сотрудник),
		|		СотрудникиДУ.ФизЛицо,
		|		ВЫБОР
		|			КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|				ТОГДА 3
		|			КОГДА СотрудникиДУ.ЭтоТрудовойДоговор
		|				ТОГДА 4
		|			ИНАЧЕ 5
		|		КОНЕЦ,
		|		МАКСИМУМ(СотрудникиДУ.НайденоПоНаименованию)
		|	ИЗ
		|		ВТ_ФизическиеЛица КАК СотрудникиДУ
		|	
		|	СГРУППИРОВАТЬ ПО
		|		СотрудникиДУ.ФизЛицо,
		|		ВЫБОР
		|			КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|				ТОГДА 3
		|			КОГДА СотрудникиДУ.ЭтоТрудовойДоговор
		|				ТОГДА 4
		|			ИНАЧЕ 5
		|		КОНЕЦ) КАК СписокСотрудников
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			СписокФизическихЛиц.Сотрудник КАК Сотрудник,
		|			СписокФизическихЛиц.Физлицо КАК Физлицо,
		|			МИНИМУМ(СписокФизическихЛиц.Приоритет) КАК Приоритет,
		|			СписокФизическихЛиц.НайденоПоНаименованию КАК НайденоПоНаименованию
		|		ИЗ
		|			(ВЫБРАТЬ
		|				РаботникиОсновноеМесто.Сотрудник КАК Сотрудник,
		|				РаботникиОсновноеМесто.Физлицо КАК Физлицо,
		|				1 КАК Приоритет,
		|				РаботникиОсновноеМесто.НайденоПоНаименованию КАК НайденоПоНаименованию
		|			ИЗ
		|				ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиОсновноеМесто
		|			ГДЕ
		|				РаботникиОсновноеМесто.ЭтоОсновноеМестоРаботы
		|			
		|			ОБЪЕДИНИТЬ
		|			
		|			ВЫБРАТЬ
		|				РаботникиСовместительство.Сотрудник,
		|				РаботникиСовместительство.Физлицо,
		|				2,
		|				РаботникиСовместительство.НайденоПоНаименованию
		|			ИЗ
		|				ВТ_Сотрудники_ТрудовойДоговор КАК РаботникиСовместительство
		|			ГДЕ
		|				(НЕ РаботникиСовместительство.ЭтоОсновноеМестоРаботы)
		|			
		|			ОБЪЕДИНИТЬ
		|			
		|			ВЫБРАТЬ
		|				СотрудникиДУ.Сотрудник,
		|				СотрудникиДУ.ФизЛицо,
		|				ВЫБОР
		|					КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|						ТОГДА 3
		|					КОГДА СотрудникиДУ.ЭтоТрудовойДоговор
		|						ТОГДА 4
		|					ИНАЧЕ 5
		|				КОНЕЦ,
		|				СотрудникиДУ.НайденоПоНаименованию
		|			ИЗ
		|				ВТ_ФизическиеЛица КАК СотрудникиДУ) КАК СписокФизическихЛиц
		|		
		|		СГРУППИРОВАТЬ ПО
		|			СписокФизическихЛиц.Физлицо,
		|			СписокФизическихЛиц.НайденоПоНаименованию,
		|			СписокФизическихЛиц.Сотрудник) КАК СписокФизическихЛиц
		|		ПО СписокСотрудников.Физлицо = СписокФизическихЛиц.Физлицо
		|			И СписокСотрудников.Приоритет = СписокФизическихЛиц.Приоритет";*/
			}
			//Выборка = Запрос.Выполнить().Выбрать();
			//Количество = Выборка.Количество();
			if(true/*Количество < 51*/)
			{
				//Значение = Новый СписокЗначений;
				while(true/*Выборка.Следующий()*/)
				{
					if(true/*ВозвращатьФизлицо*/)
					{
						//Значение.Добавить(Выборка.Физлицо, ?(Выборка.НайденоПоНаименованию,Выборка.ФизлицоНаименование, Выборка.Код + " (" + Выборка.ФизлицоНаименование + ")"));
					}
				}
				/*;
		
		СтандартнаяОбработка = Ложь;*/
			}
			return null;
		}
		// ПодобратьСписокСотрудников()
	}
}
